package br.com.petshow.dao;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.petshow.model.Animais;
import br.com.petshow.utils.SqlField;

public class AnimaisDao extends GenericDao<Animais> {

	public AnimaisDao() {
		setTableName("ANIMAIS");
		setSequenceName("SQ_ID_ANIMAIS");
	}
	
	@Override
	public void insertOrUpdate(Animais o) throws SQLException {
		setFields(o);
		super.insertOrUpdate(o);
	}

	@Override
	public void delete(Animais o) {
		super.delete(o);
	}
	
	private void setFields(Animais o) {
		List<SqlField> fields = new ArrayList<SqlField>();

		SqlField nome = new SqlField("nome",o.getNome());
		SqlField idTipos = new SqlField("id_tipos",o.getTipo().getId());
		SqlField idDonos = new SqlField("id_donos",o.getDono().getId());
		SqlField cor = new SqlField("cor",o.getCor());
		SqlField idade = new SqlField("idade",o.getIdade());
		
		fields.add(nome);
		fields.add(idTipos);
		fields.add(idDonos);
		fields.add(cor);
		fields.add(idade);
		
		setFieldsToInsertOrEdit(fields);
	}

	@Override
	public Animais tratarRetorno(ResultSet rs) throws SQLException {
		Animais animal = new Animais();
		rs.next();
		ResultSetMetaData rsmd = rs.getMetaData();
		
		TiposDao tiposDao = new TiposDao();
		DonosDao donosDao = new DonosDao();
		
		for(int i = 1; i <= rsmd.getColumnCount(); i++) {
			switch (rsmd.getColumnName(i).toLowerCase()) {
			case "id":
				animal.setId(rs.getInt("id"));
				break;
			case "nome":
				animal.setNome(rs.getString("nome"));
				break;
			case "id_tipos":
				animal.setTipo(tiposDao.getObjectById(rs.getInt("id_tipos")));
				break;
			case "id_donos":
				animal.setDono(donosDao.getObjectById(rs.getInt("id_donos")));
				break;
			case "cor":
				animal.setCor(rs.getString("cor"));
				break;
			case "idade":
				animal.setIdade(rs.getInt("idade"));
				break;
			default:
				break;
			}
		}
		
		return animal;
	}

	@Override
	public List<Animais> tratarRetornoList(ResultSet rs) throws SQLException {
		List<Animais> retorno = new ArrayList<Animais>();
		
		TiposDao tiposDao = new TiposDao();
		DonosDao donosDao = new DonosDao();
		
		while(rs.next()) {
			Animais animal = new Animais();
			ResultSetMetaData rsmd = rs.getMetaData();
			
			for(int i = 1; i <= rsmd.getColumnCount(); i++) {
				switch (rsmd.getColumnName(i).toLowerCase()) {
				case "id":
					animal.setId(rs.getInt("id"));
					break;
				case "nome":
					animal.setNome(rs.getString("nome"));
					break;
				case "id_tipos":
					animal.setTipo(tiposDao.getObjectById(rs.getInt("id_tipos")));
					break;
				case "id_donos":
					animal.setDono(donosDao.getObjectById(rs.getInt("id_donos")));
					break;
				case "cor":
					animal.setCor(rs.getString("cor"));
					break;
				case "idade":
					animal.setIdade(rs.getInt("idade"));
					break;
				default:
					break;
				}
			}
			retorno.add(animal);
		}

		return retorno;
	}

	
}
